import base64
import datetime
import io
import json
import sys
import threading

from math import pi

import matplotlib
import pandas as pd
import requests
from matplotlib import pyplot as plt
matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
API_KEY = "8QRGwlx3EiTgFhx8isqSxGye"
SECRET_KEY = "u3Nu9cZRfjrxKWCjikhlKW0LM35TOPYM"


class UserProfile:
    def __init__(self, skills, job):
        self.skills = skills
        self.job = job
def get_access_token():
    """
    使用 AK，SK 生成鉴权签名（Access Token）
    :return: access_token，或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

def str_to_json(data:str):
    start_index = data.find("```json")
    end_index = data.rfind("```")
    result = data[start_index+8:end_index]
    return result

def main2(user_profile):
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token()
    # 注意message必须是奇数条
    payload = json.dumps({
        "messages": [
            {
                 "role": "user",
                "content": "这是用户的技能"+user_profile.skills+"他的期望工作是"+user_profile.job+"根据提供的信息给出 教育背景,荣誉指数,语言能力,技能匹配度,学习能力打个分  十分制"
            +" 请按照以下JSON格式对以下项目进行打分，并只返回这个格式的分数，不要添加任何额外的描述或信息: { '教育背景': [分数],  '荣誉指数': [分数],  '语言能力': [分数],  '技能匹配度': [分数], '学习能力': [分数]  }  "



            }
            # ,
            # {
            #    "role": "assistant",
            #    "content": "你好，有什么我可以帮助你的吗？"
            # }
        ]
    })
    headers = {
        'Content-Type': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    res=response.text
    data = json.loads(res, strict=False)

    # 提取result键的值
    result = data['result']
    result = str_to_json(result)
    result = result.replace("'", '"')
    # print(result)
    data = json.loads(result, strict=False)  # 注意还要一次loads转换才行 我都是参考gpt和网上的代码观察到的
   # data = extract_scores_by_category(data)
    res = data['教育背景']
    res1 = data['荣誉指数']
    res2 = data['语言能力']
    res3 = data['技能匹配度']
    res4 = data['学习能力']
    list = [res, res1, res2, res3, res4]
    return list
def plot_data(ax,list5):
    df = pd.DataFrame({
        'group': ['A', 'B', 'C', 'D', 'E'],
        'var1': list5
    })
    df.index = ['教育背景', '荣誉指数', '语言能力', '技能匹配度', '学习能力']
    df = df.T

    values = df.iloc[0].values.flatten().tolist()

    # number of variable
    # 变量类别
    categories = list(df)
    # 变量类别个数
    N = len(categories)
    # plot the first line of the data frame.
    # 绘制数据的第一行
    values = df.iloc[1].values.flatten().tolist()

    # 将第一个值放到最后，以封闭图形
    values += values[:1]

    angles = [n / float(N) * 2 * pi for n in range(N)]
    angles += angles[:1]
    ax = plt.subplot(111, polar=True)
    # fig,ax=plt.subplots(111,polar=True)
    # 创建一个线程来绘制图形

    plt.xticks(angles[:-1], categories, color='grey', size=8)
    ax.set_rlabel_position(0)
    plt.yticks([5, 10], ["5", ""], color="grey", size=7)
    plt.ylim(0, 10)

    ax.plot(angles, values, linewidth=1, linestyle='solid')

    ax.fill(angles, values, 'b', alpha=0.1);

def figures(list5):
    plt.ion()
    fig, ax = plt.subplots()
    plot_data(ax,list5)
    #plot_thread = threading.Thread(target=plot_data, args=(ax,list5))
    #plot_thread.start()
    plt.ioff()  # 关闭非阻塞模式，显示最终结果
    #plt.show()
    fig.savefig('plot.png')

    # 读入PNG图片
    with open('plot.png', 'rb') as f:
        img_data = f.read()

    # 将PNG图片转换为Base64编码格式
    img_base64 = base64.b64encode(img_data).decode('utf-8')

    # 将Base64编码格式插入HTML模板中的<img>标签中
    html = format(img_base64)# 这个属于str类型

    # 输出HTML代码
    return html




if __name__ == '__main__':
    #skills = "Html,Jss"
    #job = "前端"
    arguments = ''
    # 打印传递的参数
    if len(sys.argv) > 1:
        for arg in sys.argv[1:]:
            arguments = ' '.join(sys.argv[1:])
    fields = arguments.split(',')
    job = fields[-1]
    skills = ','.join(fields[0])
    user_profile = UserProfile(skills, job)
    jason = figures(main2(user_profile))
    print(jason)
    # 类型是str的
    #end = datetime.datetime.now()
    #print(end-start)